#!/usr/bin/env python
# encoding: utf-8
'''
@author: heshengjin-何胜金
@contact: 2356899074@qq.com
@software: pycharm
@file: argumentsTest.py
@time: 2018/12/22 0022 16:37
@desc:
        python数据类型：
        1、字符串 isinstance str
        2、布尔类型  isinstance bool
        3、整数   isinstance int
        4、浮点数 isinstance float
        5、数字（整数、浮点数）3、4
        6、列表 isinstance list
        7、元组 isinstance tuple
        8、字典 isinstance dict
        9、日期

       一般的就是就是类似Java参数一般基本数值和引用传递（测试参数类似java引用传递,类似Java等参数方式）
       可变参数实际函数内部是一个tuple（类似java引用传递:不可变了,但是不是真的不可改变）
       关键字参数实际还是一个dict（只是一个copy拷贝，完全不是外面那个,***浅拷贝***）
'''
import time


# print(isinstance( 123,int))
# print(isinstance( 123.123,float))
# print(isinstance('''何胜金''',str))


# linux shell的时间格式化
# date +'%Y-%m-%d %H:%M:%S'
print (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))

def test(m, n, *g, **kw):
    print( '--------------isinstance 开始----------------------')
    # 一般基本参数值
    print(isinstance(m, bool))
    # 一般参数list
    print(isinstance(n, list))

    # 可变参数tuple
    print(isinstance(g, list))
    print(isinstance(g, tuple))

    # 关键字参数，copy的dict
    print(isinstance(kw, dict))
    print('--------------isinstance 完毕----------------------')
    # 改变一般参数（bool）
    m = False
    # 改变一般参数（list是引用）
    n.append(100)

    # 改变可变参数,tuple不可以改变
    # 但是g[3]又是一个list对象引用，可以改变
    g[3].append(100)

    # 改变关键字参数，改变copy的那个
    kw['hsj'] = 18
    kw['lby'].append(100)

    print(m)
    print( n)
    print( g)
    print( kw)

def print_user_info( name ,  age  , sex = '男' ,*h, **g):
    # 打印用户信息
    print('昵称：{}'.format(name) , end = ' ')
    print('年龄：{}'.format(age) , end = ' ')
    print('性别：{}'.format(sex) ,end = '\n' )
    print('''可变参数''',h)
    print('''关键字参数''',g)
    print('''////print_user_info////结束\n''')
    return



if __name__ == '__main__':

    # 调用 print_user_info 函数
    # ----------散传参数(没有可变参数)-----------
    print_user_info('两点水', 18, '女',h=[4,5,6], gg=[1, 2, 3])
    # ----------散传参数(没有可变参数)-----------
    print_user_info('4点水', 20, 'man',h=[4,5,6], gg=[1, 2, 3], hh=[1, 2, 3])
    # ----------变量方式传参数------
    # (强烈推荐此种方式)
    gg = {'hsj': 'hsj is smart!'}
    # hh = [4, 5, 6]
    hh = (4, 5, 6)
    print_user_info('3点水', 20, 'man',*hh, **gg)
    # ////////////////////////////////////////////////////////////

    # 一般参数list
    m = True
    n = [7, 8, 9]

    # 可变参数，list
    g = (1, 2, 3, [1, 2, 3])

    # 关键字参数，字典
    kw = {'hsj': 27, 'lby': [1, 2, 3, 4]}

    print( '--------------原始的数据变量（观察变量状态）----------------------')
    print(m)
    print( n)
    print( g)
    print( kw)

    print('---------------////start////---------------------')
    test(m, n, *g, **kw)
    print( '---------------////end////---------------------')

    print('---------------原始的数据变量（观察变量状态）---------------------')
    print(m)
    print(n)
    print( g)
    print( kw)

